package com.rolerealm.controller;

import com.rolerealm.common.result.Result;
import com.rolerealm.common.util.ResultUtil;
import com.rolerealm.domain.vo.CharacterVO;
import com.rolerealm.domain.vo.PageResult;
import com.rolerealm.service.RecommendationService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;

/**
 * 推荐控制器
 * 
 * @author RoleRealm Team
 * @version 1.0.0
 */
@Slf4j
@RestController
@RequestMapping("/api/recommendations")
@RequiredArgsConstructor
public class RecommendationController {

    private final RecommendationService recommendationService;

    /**
     * 获取用户个性化角色推荐
     * 
     * @param userId 用户ID（临时参数，后续从JWT中获取）
     * @param page 页码，默认1
     * @param size 每页大小，默认10
     * @return 推荐角色分页列表
     */
    @GetMapping("/characters")
    public Result<PageResult<CharacterVO>> getRecommendedCharacters(
            @RequestParam Long userId,
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size) {
        
        log.debug("获取用户推荐角色，用户ID：{}，页码：{}，每页大小：{}", userId, page, size);
        
        PageResult<CharacterVO> result = recommendationService.getRecommendedCharacters(userId, page, size);
        return ResultUtil.success(result);
    }

    /**
     * 热门角色（用于前端 trending 接口）
     */
    @GetMapping("/characters:trending")
    public Result<List<CharacterVO>> getTrendingCharacters(
            @RequestParam(defaultValue = "10") Integer limit) {
        log.debug("获取热门角色，limit: {}", limit);
        List<CharacterVO> list = recommendationService.getPopularRecommendations(limit);
        return ResultUtil.success(list);
    }

    /**
     * 刷新用户推荐结果
     * 
     * @param userId 用户ID（临时参数，后续从JWT中获取）
     * @return 操作结果
     */
    @PostMapping("/refresh")
    public Result<Void> refreshUserRecommendations(@RequestParam Long userId) {
        log.debug("刷新用户推荐结果，用户ID：{}", userId);
        
        recommendationService.refreshUserRecommendations(userId);
        return ResultUtil.success();
    }

    /**
     * 清除用户推荐缓存
     * 
     * @param userId 用户ID（临时参数，后续从JWT中获取）
     * @return 操作结果
     */
    @DeleteMapping("/cache")
    public Result<Void> clearUserRecommendations(@RequestParam Long userId) {
        log.debug("清除用户推荐缓存，用户ID：{}", userId);
        
        recommendationService.clearUserRecommendations(userId);
        return ResultUtil.success();
    }
}
